home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / LGP250S1.ZIP / src / libgplus.5 / libgplus / tests / tcomplex.cc < prev    next >
C/C++ Source or Header  |  1993-07-25  |  4KB  |  135 lines

  1. /*
  2.  a test file for Complex
  3. */
  4.  
  5. #include <assert.h>
  6.  
  7. #define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
  8.                        else _assert(#ex, __FILE__,__LINE__); }
  9.  
  10. #include <Complex.h>
  11. #include <builtin.h>
  12.  
  13. // to test near-equality
  14.  
  15. const double eps = 0.000001;
  16.  
  17. static void close_enough(const Complex& a, const Complex& b)
  18. {
  19.   assert(abs(real(a) - real(b)) < eps &&
  20.          abs(imag(a) - imag(b)) < eps);
  21. }
  22.  
  23.  
  24. void test3(Complex& a, Complex& b, Complex& c)
  25. {
  26.  
  27.   close_enough(-(-a) , a);
  28.   close_enough((a + b) ,  (b + a));
  29.   close_enough((a + (-b)) ,  (a - b));
  30.   close_enough((a * b) ,  (b * a));
  31.   close_enough((a * (-b)) , -(a * b));
  32.   close_enough((a / (-b)) , -(a / b));
  33.   close_enough((a - b) ,  -(b - a));
  34.   close_enough((a + (b + c)) , ((a + b) + c));
  35.   close_enough((a * (b * c)) , ((a * b) * c));
  36.   close_enough((a * (b + c)) , ((a * b) + (a * c)));
  37.   close_enough(((a - b) + b) , a);
  38.   close_enough(((a + b) - b) , a);
  39.   close_enough(((a * b) / b) , a);
  40.   close_enough(((a / b) * b) , a);
  41.  
  42.  
  43.   Complex x = a;
  44.   x *= b;
  45.   close_enough(x , (a * b));
  46.   x += c;
  47.   close_enough(x , ((a * b) + c));
  48.   x -= a;
  49.   close_enough(x , (((a * b) + c) - a));
  50.   x /= b;
  51.   close_enough(x , ((((a * b) + c) - a) / b));
  52.  
  53. }
  54.  
  55. main()
  56. {
  57.   Complex one = 1.0;
  58.   Complex i (0.0, 1.0);
  59.   Complex neg_one = -1.0;
  60.  
  61.   cout << "Complex one = " << one << "\n";
  62.   cout << "i = " << i << "\n";
  63.   cout << "neg_one = " << neg_one << "\n";
  64.   cout << "sqrt(neg_one) = " << sqrt(neg_one) << "\n";
  65.  
  66.   Complex a (2.0, 3.0);
  67.   Complex b (4.0, 5.0);
  68.  
  69.   cout << "a = " << a << "\n";
  70.   cout << "b = " << b << "\n";
  71.  
  72.   cout << "a + one = " << (a + one) << "\n";
  73.   (close_enough((a+one), Complex(3.0, 3.0)));
  74.   cout << "a - one = " << (a - one) << "\n";
  75.   (close_enough((a-one), Complex(1.0, 3.0)));
  76.   cout << "a * one = " << (a * one) << "\n";
  77.   (close_enough((a*one), a));
  78.   cout << "a / one = " << (a / one) << "\n";
  79.   (close_enough((a/one), a));
  80.  
  81.   cout << "a + b = " << (a + b) << "\n";
  82.   (close_enough((a+b), Complex(6.0, 8.0)));
  83.   cout << "a - b = " << (a - b) << "\n";
  84.   (close_enough((a-b), Complex(-2.0, -2.0)));
  85.   cout << "a * b = " << (a * b) << "\n";
  86.   (close_enough((a*b), Complex(-7.0, 22.0)));
  87.   cout << "a / b = " << (a / b) << "\n";
  88.   (close_enough((a/b), Complex(0.5609760976, 0.0487804878)));
  89.  
  90.   Complex c;
  91.  
  92.   c = a; cout << "c = a; c += b = " << (c += b) << "\n";
  93.   c = a; cout << "c = a; c -= b = " << (c -= b) << "\n";
  94.   c = a; cout << "c = a; c *= b = " << (c *= b) << "\n";
  95.   c = a; cout << "c = a; c /= b = " << (c /= b) << "\n";
  96.  
  97.   cout << "-a = " << (-a) << "\n";
  98.   cout << "real(a) = " << real(a) << "\n";
  99.   assert(real(a) == 2.0);
  100.   cout << "imag(a) = " << imag(a) << "\n";
  101.   assert(imag(a) == 3.0);
  102.   cout << "conj(a) = " << conj(a) << "\n";
  103.   assert(conj(a) == Complex(2.0, -3.0));
  104.   cout << "norm(a) = " << norm(a) << "\n";
  105.   assert(norm(a) == 13.0);
  106.  
  107.   cout << "abs(a) = " << abs(a) << "\n";
  108.   cout << "arg(a) = " << arg(a) << "\n";
  109.   cout << "cos(a) = " << cos(a) << "\n";
  110.   cout << "sin(a) = " << sin(a) << "\n";
  111.   cout << "cosh(a) = " << cosh(a) << "\n";
  112.   cout << "sinh(a) = " << sinh(a) << "\n";
  113.   cout << "log(a) = " << log(a) << "\n";
  114.   cout << "exp(a) = " << exp(a) << "\n";
  115.   cout << "sqrt(a) = " << sqrt(a) << "\n";
  116.   cout << "pow(a, 2) = " << pow(a, 2) << "\n";
  117.   cout << "pow(a, b) = " << pow(a, b) << "\n";
  118.  
  119.   Complex d (10, 20);
  120.   Complex e = pow(a, 2);
  121.  
  122.   test3(one, one, one);
  123.   test3(a, a, a);
  124.   test3(a, b, d);
  125.   test3(e, i, b);
  126.   test3(d, d, i);
  127.  
  128.   cout << "enter a Complex number in form (a, b) or (a) or a: ";
  129.   cin >> c;
  130.   cout << "number = " << c << "\n";
  131.  
  132.   cout << "\nEnd of test\n";
  133.   return 0;
  134. }
  135.